# 位运算
# 1.按位与
# 2.按位或
# 3.按位异或
# 4.按位取反
# 5.左移
# 6.右移
#
# 位运算,需要先转为二进制,再运算
#
# 1.按位与
# 格式 x & y
# 规律:两者为1即为1,否则为0

a=5 # 0101
b=12 # 1100
print( a & b )

a=10
b=36
print( a & b )

# 2.按位或
# 格式:x | y
# 规则:一个为1即为1.否则为0

a=10
b=5
print( a | b )

a = 10
b = 5
print( a ^ b )

a = 10
b = 8
print( a ^ b )
#
# 4.按位取反
# 格式 ~x
# 规则:~x ==>  -x-1

a=5
a=10
a=-10
print(~a)

# 5.左移
# 格式:x<<num数字
# 规则:二进制依次向左移动num位,低位补0

a=10
print( a << 1 ) #20

a = 15
print( a<<1 )  # 30

a = 20
print( a << 1 ) # 40


# 6.右移
# 格式:x>num数字
# 规则:二进制依次右移移动 num位,高位补0,低位丢弃

x>>1  ==> x // 2
x>>2  ==> x // 2 // 2
x>>n ==>x // 2的n次方

a = 10
print（ a >> 1 ） #5

a = 14
print(a >>1)   #7


# 查找规律
# # 按位或
# #   奇数 | 1的本身
# #   偶数 | 则加1

a=5
print（a | 1）
a = 7
print(a | 1)=7
a=4
print(a | 1)
a = 6
print(a | 1)

x = 10
print(x << 1 | 1)
# x<<1 | 1  ==>2*x + 1

# 按位与
# 1结果为1,则为奇数
# 1结果为0,则为偶数
#
#
# 按位异或
# 奇数^1,结果-1
# 偶数*1,结果+1

a = 5
print(a^1)  #4


